package Day03;
//1 运算符
public class Day03 {
    public static void main(String[] args) {
        //算数运算符
        //+ ,-, *, /, %, ++, --
        //% 取余 取模
           //(商之后剩下的数便是余数 余数为零时称为整除)
        //0取余任何数都是0 算作整除
        //字符也可以取余(先转成int再计算)

        //++/-- 自增1/自减1 在本身基础上增1/减1
           //(a=a+1  a=a-1)

        //--/++可以写在变量前也可以在其后(a++/++a)
        //两种情况
        //1 单独使用时 a++/++a的作用是一样的 都是自增1
        //2 --/++被使用时 写前写后不一样 a++和++a的值不一样 a++=a ++a=a+1
           //(一句话中 除了++/-- 还有其他代码)

        //规律
        //不管单独使用还是被使用 都要进行自增/自减
           //注意:a++是先赋值再自增 ++a是先自增后赋值


        //关系运算符(六个)
        //>, < ,>=, <=, ==, !=
        //关系运算结果为Boolean型 关系成立就是true 不成立就是false

        //在Java中，运算符有不同的优先级，它们按照一定的顺序进行计算。以下是Java中常见的运算符优先级顺序（从高到低）：
        //1. 一元运算符（例如：++, --）
        //2. 乘法和除法运算符（例如：*，/，%）
        //3. 加法和减法运算符（例如：+，-）
        //4. 移位运算符（例如：<<，>>，>>>）
        //5. 关系运算符（例如：<，>，<=，>=）
        //6. 相等运算符（例如：==，!=）
        //7. 位运算符（例如：&，|，^）
        //8. 逻辑运算符（例如：&&，||）
        //9. 条件运算符（例如：? :）
        //10. 赋值运算符（例如：=，+=，-=）
        //11. 逗号运算符（,）
        //需要注意的是，如果有多个运算符出现在同一个表达式中，优先级高的运算符会先进行计算。如果优先级相同，则按照从左到右的顺序进行计算。


        //逻辑运算符(三个)
        //1 常用于多个条件的判断
        //2 逻辑运算建立在关系运算的基础之上的 逻辑运算的结果也是Boolean型
           //1 && 短路与/逻辑与(并且)(两个条件)
        //两边条件都符合(都为真) 结果才为真 其中之一为false则得false
           //2 || 短路非/逻辑或(或者)(两个条件)
        //有真则为真 见true就为true 只有条件都为false 结果才为false
           //3 ! 逻辑非(取反)(只有一个条件 又叫一目运算符)
        //非真则假 非假则真
        //例如 今天下雨为true
        // 则    !   为false
        //非下雨是假 则今天真的下雨

        //规则
        //表示关系在min和max之间 一定用&&(表示"之间" 范围包括min和max)
        //

        //短路与  短路非
        // && 当第一个条件为false时 则发生短路(后面的条件不执行了)
        //例如 int a=5,b=10,c=5;
            //Boolean b1=a>b && c++>2;
            //System.out.println(b1);//得false
            //System.out.println(c); //得5 不变 因为发生短路 &&后面的不执行了
        // || 当第一个条件为true时 则发生短路(后面的条件不执行了)


        // & |
        //不短路与  不短路或   (&|还在底层逻辑进行了位运算)


        //赋值运算符
        //1 简单赋值运算符 =
        //2 扩展赋值运算符 += -= *= /= %=
        int a=10;
        a+=10;// 相当于a=(int)(a+10)自动强转

        //字符串连接运算符
        //+
        //若两边任意一边出现了字符串 则做字符串连接
           //一串字符 放在双引号中 长度没有限制 (可以没有内容"")
        //若两边是数字 则做加法运算
        //作用 同化作用
        //不管什么类型经过字符串类型连接之后都变成字符串类型


        //条件运算符(三目运算符)
        //语法Boolean表达式 ? 表达式1 :表达式2
        //执行过程
        //整个条件运算是有值的,要么是表达式1的值 要么是表达式2的值
           //若Boolean为true 则值是表达式1的 若为false 则值为表达式2的
        int num=5;
        int flag=num>0?1:-1;//num>0为true 则整个运算的值为1 赋值1给flag
        System.out.println(flag);//输出得1


        //分支结构的应用
        //顺序结构 从上往下逐行执行 每句必走
        //分支结构 有条件的执行某语句 并非每句必走
        //循环结构 ......

        //分支结构的分类
        //if结构 一条路
        //if else结构 两条路
        //if else if结构 多条路
        //switch case结构

        //if
        //语法 if(boolean){
        //    语句块
        // }

        //if else (用于二选一)
        //if(boolean){
        //    语句块1
        // }else{
        //    语句块2
        // }
        //两个语句块 必走其中之一
        // (不可能都走<走完其中一个 整个if结构就结束了> 不可能都不走<判断结果不是true就是false>)

        //if...else if (用于多选一)
        //if(boolean--1){
        // 语句块1
        // }else if(boolean--2){
        // 语句块2
        // }else if(boolean--3){
        // 语句块3
        // }...{
        // ...
        // }else{
        // 最后语句块
        // }
        //多个语句块只走其中之一
        //最后的else并非必要语句 但通常会有 因为前面所有条件都不符合 必定走最后一个 所以没必要加if条件 直接用else即可


        //Day03补充
        //switch...case结构:常用于实现多条路
        //优点 效率高,结构清晰
        //缺点 目前只能对整数做判断(也支持String和枚举)
            //只能对整数判断相等关系

        //应用场景
        //若业务是对整数判断相等 即输入的整数判断相等后激活数字对应业务服务 则switch为首选
           // 例如电话营业厅提示:...请按1,底层逻辑就是switch...case

        //从不同入口判断
        //匹配上case后 后续case都会输出(穿透性),不同路之间需要加break
           //看到break:便会跳出switch 只输出入口中相对应的内容

        //选项case一定不能重复
        //default放在switch中哪里都可以 都是先走其他case 只有都不匹配才会走此路
           //需要注意的是 若default不在最后需要加上(break;)
        //整数范围不包括long 可选范围只有byte short char int String 枚举
























    }
}
